package kgame5.enginex.entityimpl {
import kgame5.enginex.Entity;
import kgame5.enginex.EntityMessageVO;
import kgame5.enginex.EntityVO;
import kgame5.enginex.ISenceWorld;
import kgame5.enginex.comp.ILogic;
import kgame5.enginex.event.EntityMessageEvent;
import kgame5.kgu.spacial.SpacialManager;

/**
 * @author kk
 * 实现了逻辑接口的Entity,这个是为了方便以后使用。
 * 比如actor(tank,shot,flower)都用这个
 */
public class LogicEntity extends Entity implements ILogic{
	
	protected var senceWorld:ISenceWorld;//本地保存一个,其实主要是State
	
	public function LogicEntity(_vo:EntityVO){
		super(_vo);
	}
	
	public function setSenceWorld(senceWorld:ISenceWorld):void{
		this.senceWorld=senceWorld;
	}
	
	//-更新逻辑
	public function updateLogic():void{
		
	}
	
	//-事件接收
	public function handleEntityMessage(mvo:EntityMessageVO):void{
		
	}
	
	//-切换fsm状态
	public function SwitchFSMState(fsmID:int,stateID:int,data:Object=null):void{
		
	}
	//-------------事件机制---------------
	//这个可以做好些
	//注意这里是有缺陷的，这里没有包含发送者的标志?
	//-这些发送接口，会调用Entity的dispatcheEvent向world发送事件
	public function postEntityMessage(id:int,msgName:String,data:*):void{
		var mvo:EntityMessageVO=this.createMsgVO(msgName,data);
		mvo.scope=EntityMessageVO.SCOPE_SOMEONE;//范围，1，某人，2全局，3cateID,4typeID
		mvo.toID=id;//这个与scope配合使用 
	
		this.dispatchEvent(new EntityMessageEvent(EntityMessageEvent.TYPE,mvo));
	}
	public function broadcastEntityMessage(msgName:String,data:*):void{
		var mvo:EntityMessageVO=this.createMsgVO(msgName,data);
		mvo.scope=EntityMessageVO.SCOPE_ALL;//范围，1，某人，2全局，3cateID,4typeID
		
		this.dispatchEvent(new EntityMessageEvent(EntityMessageEvent.TYPE,mvo));
	}
	public function broadcastEntityMessageByCateID(cateID:int,msgName:String,data:*):void{
		var mvo:EntityMessageVO=this.createMsgVO(msgName,data);
		mvo.scope=EntityMessageVO.SCOPE_BY_CATEID;//范围，1，某人，2全局，3cateID,4typeID
		mvo.toID=cateID;
		this.dispatchEvent(new EntityMessageEvent(EntityMessageEvent.TYPE,mvo));
	}
	//都某特定型号物品发送，比如树木型的障碍物
	public function broadcastEntityMessageByTypeID(typeID:int,msgName:String,data:*):void{
		var mvo:EntityMessageVO=this.createMsgVO(msgName,data);
		mvo.scope=EntityMessageVO.SCOPE_BY_TYPEID;//范围，1，某人，2全局，3cateID,4typeID
		mvo.toID=typeID;
		this.dispatchEvent(new EntityMessageEvent(EntityMessageEvent.TYPE,mvo));
	}
	
	private function createMsgVO(msgName:String,data:*):EntityMessageVO{
		var mvo:EntityMessageVO=new EntityMessageVO();
		
		mvo.name=msgName;
		mvo.data=data;
		mvo.sender=_vo;
		return mvo;
	}
}//end of class
}
